package main

import "fmt"

// 方法就是定义了接收者的函数（这也是二者的区别），是作用于特定类型的变量的函数，这种特定类型的变量就是接收者
// 方法的定义格式
// func (接收者变量 接收者类型) 方法名(参数列表) (返回值) { 方法体}
// 接收器就代表结构体的实例化对象
// 结构体（模板）
type Person struct {
	Name string
	Age  int
}

// 定义两个类型的方法
// 值类型接收器
// p 是接收器变量名 Person是接收器类型
func (p Person) printInfo() {
	fmt.Printf("nameis:%s, ageis:%d \n", p.Name, p.Age)
}

// 指针类型接收器, 将改变接收器的原值
// 如果是设置值类型 将copy 一个接收器并改变值，不会改变原值
func (p *Person) setInfo(name string, age int) {
	p.Name = name
	p.Age = age
}

func main() {
	//实例化----即使用结构体
	p1 := &Person{
		Name: "wu",
		Age:  0,
	}

	p1.printInfo()
	fmt.Println(p1)

	p1.setInfo("lisi", 20)
	fmt.Println(p1)
}
